package cz.vse.po1715.lode.hra;

/*******************************************************************************
 * Instance třídy {@code Lode} představuje třídu,
 * která se stará o vytváření jednotlivých lodí.
 *
 * @author Jan Bursa
 * @version 1.00,  1.8.2011
 */

public class Lode {

    private static int[][] hraci_pole = HraciPole.hraci_pole;
    private static int[][] hraci_pole2 = HraciPole.hraci_pole2;

    /** Proměnná kontrolující zda jsou všechny lodě rozmístěny */
    public static boolean vsechny_lode = false;
    public static boolean vsechny_lode2 = false;

    /** Proměnné evidující aktuální počet dostupných typů lodí */
    public static int pocet_clunu = 3;
    public static int pocet_jachet = 2;
    public static int pocet_parniku = 1;
    public static int pocet_tankeru = 1;
    public static int pocet_clunu2 = 3;
    public static int pocet_jachet2 = 2;
    public static int pocet_parniku2 = 1;
    public static int pocet_tankeru2 = 1;

    /** Pomocná proměnná určující směr číselným způsobem */
    private static int pom_smer;

    /** X-ová souřadnice. Převedena ze znaku */
    private static int x;

    /** Textové vyjádření názvu lodi. Slouží jen při vypisoání */
    private static String nazev_lode;

    /** Metoda, pomocí které je možno vytvořit jakýkoliv dostupný typ lodě*
     *
     * @param plavidlo nazev lodi, která má být vytvořena
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/

    public static void Plavidlo(String plavidlo, String znak, int y, String smer)
    {
        if(plavidlo.equals("clun")){Clun(znak, y, smer);}
        else if(plavidlo.equals("jachta")){Jachta(znak, y, smer);}
        else if(plavidlo.equals("parnik")){Parnik(znak, y, smer);}
        else if(plavidlo.equals("tanker")){Tanker(znak, y, smer);}
        else{System.out.println("Špatný typ lodě");}
    }

     /** Metoda, pomocí které je možno vytvořit člun*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Clun(String znak, int y, String smer)
    {
        nazev_lode = "Člun";
        Lod(znak, y, smer, 0);   
    }

         /** Metoda, pomocí které je možno vytvořit člun*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Clun(int y, String znak, String smer)
    {
        Clun(znak, y, smer);  
    }

         /** Metoda, pomocí které je možno vytvořit jachta*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Jachta(String znak, int y, String smer)
    {
        nazev_lode = "Jachta";
        Lod(znak, y, smer, 1);
    }

         /** Metoda, pomocí které je možno vytvořit jachta*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Jachta(int y, String znak, String smer)
    {
        Jachta(znak, y, smer);
    }

         /** Metoda, pomocí které je možno vytvořit parník*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Parnik(String znak, int y, String smer)
    {
        nazev_lode = "Parnik";
        Lod(znak, y, smer, 3);
    }

         /** Metoda, pomocí které je možno vytvořit parník*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Parnik(int y, String znak, String smer)
    {
        Parnik(znak, y, smer);
    }

     /** Metoda, pomocí které je možno vytvořit tanker*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Tanker(int y, String znak, String smer)
    {
        Tanker(znak, y, smer);
    }

     /** Metoda, pomocí které je možno vytvořit tanker*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi*/
    public static void Tanker(String znak, int y, String smer)
     {
         PrevodZnaku(znak);
         y = y-1;

         PrevodSmeru(smer);

     if ((y >= 7 && pom_smer == 0) || (x > 8 && pom_smer == 0)  || (x >= 7 && pom_smer == 1) || (y > 8 && pom_smer == 1)  ||
                 x < 0 || y < 0 ) { System.out.println("Tanker na toto místo nelze umístit"); }
     else {

     if (pocet_tankeru2 == 0 && Hraci.id_hrac == 2){ System.out.println("Tanker již není k dispozici, zvolte jiný typ lodě"); }
     else if (pocet_tankeru == 0 && Hraci.id_hrac == 1){ System.out.println("Tanker již není k dispozici, zvolte jiný typ lodě"); }
     
     else if (hraci_pole2[y][x] > 0 && hraci_pole2[y][x] < 3 && Hraci.id_hrac == 2){ System.out.println("Na tomto místě již loď je, nebo se překrývají");}
     else if (hraci_pole[y][x] > 0 && hraci_pole[y][x] < 3 && Hraci.id_hrac == 1){ System.out.println("Na tomto místě již loď je, nebo se překrývají");}
       //pokud je, bude vytvořen
     else
     {
        if(smer.equals("v"))
     {
        for (int j = x; j <= x+1; j++)
        for (int i = y; i <= y+3; i++)
     {
        if (Hraci.id_hrac == 2){

        if (x == 0 || y == 0 || j > x) { }
        else { hraci_pole2[i-1][j-1] = 2;}
        if (y == 0 || (i > y)) { }
        else { hraci_pole2[i-1][j] = 2;}
        if(y == 0 || x == 8){ }
        else { hraci_pole2[i-1][j+1] = 2;}

        if (x == 0 || j > x) { }
        else { hraci_pole2[i][j-1] = 2;}
        hraci_pole2[i][j] = 1;
        if(x == 8){ }
        else { hraci_pole2[i][j+1] = 2;}

        if (x == 0 || y == 6 || j > x) { }
        else { hraci_pole2[i+1][j-1] = 2;}
        if (y == 6){ }
        else { hraci_pole2[i+1][j] = 2;}
        if (y == 6 || x == 8){ }
        else { hraci_pole2[i+1][j+1] = 2;}
        }
        else
        {
        if (x == 0 || y == 0 || j > x) { }
        else { hraci_pole[i-1][j-1] = 2;}
        if (y == 0 || (i > y)) { }
        else { hraci_pole[i-1][j] = 2;}
        if(y == 0 || x == 8){ }
        else { hraci_pole[i-1][j+1] = 2;}

        if (x == 0 || j > x) { }
        else { hraci_pole[i][j-1] = 2;}
        hraci_pole[i][j] = 1;
        if(x == 8){ }
        else { hraci_pole[i][j+1] = 2;}

        if (x == 0 || y == 6 || j > x) { }
        else { hraci_pole[i+1][j-1] = 2;}
        if (y == 6){ }
        else { hraci_pole[i+1][j] = 2;}
        if (y == 6 || x == 8){ }
        else { hraci_pole[i+1][j+1] = 2;}
        }
        }
        System.out.println("Tanker vytvořen");
        if(Hraci.id_hrac == 2){pocet_tankeru2 = pocet_tankeru2 -1;}
        else if(Hraci.id_hrac == 1){pocet_tankeru = pocet_tankeru -1;}
     }
        else if(smer.equals("h"))
     {
        for (int j = y; j <= y+1; j++)
        for (int i = x; i <= x+3; i++)
     {
        if (Hraci.id_hrac == 2){

        if (x == 0 || y == 0 || j > y) { }
        else { hraci_pole2[j-1][i-1] = 2;}
        if (y == 0 || j > y) { }
        else { hraci_pole2[j-1][i] = 2;}
        if (y == 0 || x == 6 || j > y) { }
        else { hraci_pole2[j-1][i+1] = 2;}

        if (x == 0 || i > x) { }
        else { hraci_pole2[j][i-1] = 2;}
        hraci_pole2[j][i] = 1;
        if (x == 6) { }
        else { hraci_pole2[j][i+1] = 2;}

        if (x == 0 || y == 8) { }
        else { hraci_pole2[j+1][i-1] = 2;}
        if (y == 8) { }
        else { hraci_pole2[j+1][i] = 2;}
        if (x == 6 || y == 8) { }
        else { hraci_pole2[j+1][i+1] = 2;}
        }
        else
        {
        if (x == 0 || y == 0 || j > y) { }
        else { hraci_pole[j-1][i-1] = 2;}
        if (y == 0 || j > y) { }
        else { hraci_pole[j-1][i] = 2;}
        if (y == 0 || x == 6 || j > y) { }
        else { hraci_pole[j-1][i+1] = 2;}

        if (x == 0 || i > x) { }
        else { hraci_pole[j][i-1] = 2;}
        hraci_pole[j][i] = 1;
        if (x == 6) { }
        else { hraci_pole[j][i+1] = 2;}

        if (x == 0 || y == 8) { }
        else { hraci_pole[j+1][i-1] = 2;}
        if (y == 8) { }
        else { hraci_pole[j+1][i] = 2;}
        if (x == 6 || y == 8) { }
        else { hraci_pole[j+1][i+1] = 2;}
            }
     }
        System.out.println("Tanker vytvořen");
        if(Hraci.id_hrac == 2){pocet_tankeru2 = pocet_tankeru2 -1;}
        else if(Hraci.id_hrac == 1){pocet_tankeru = pocet_tankeru -1;}
     }
        else { System.out.println("Tanker nevytvořen, je zadán špatný směr");}
     }
     }    if(Hraci.id_hrac == 2){System.out.println("Tanker k dipozici: " + Lode.pocet_tankeru2);}
     else if(Hraci.id_hrac == 1){System.out.println("Tanker k dipozici: " + Lode.pocet_tankeru);}

     if (Hraci.id_hrac == 2){VsechnyLode2();}
        else if (Hraci.id_hrac == 1){VsechnyLode();}
     }

     /** Metoda, pomocí které je možno vytvořit většinu lodí*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi
     * @param typ_lode číselné vyjádření typu lodě */
    public static void Lod(String znak, int y, String smer, int typ_lode)
    {
         PrevodZnaku(znak);
         y = y-1;

         PrevodSmeru(smer);

     if ((y >= 9 - typ_lode && pom_smer == 0) || (x > 9 && pom_smer == 0)  ||
         (x >= 9 - typ_lode && pom_smer == 1) || (y > 9 && pom_smer == 1)  ||
          x < 0 || y < 0 ) { System.out.println(nazev_lode + " na toto místo nelze umístit"); }

     else if (hraci_pole[y][x] > 0 && hraci_pole[y][x] < 3 && Hraci.id_hrac == 1){ System.out.println("Na tomto místě již loď je, nebo se překrývají");}
     else if (hraci_pole2[y][x] > 0 && hraci_pole2[y][x] < 3 && Hraci.id_hrac == 2){ System.out.println("Na tomto místě již loď je, nebo se překrývají");}

     else {
             if (pocet_clunu2 == 0 && typ_lode == 0 && Hraci.id_hrac == 2){ System.out.println(nazev_lode + " již není k dispozici, zvolte jiný typ lodě"); }
        else if (pocet_clunu == 0 && typ_lode == 0 && Hraci.id_hrac == 1){ System.out.println(nazev_lode + " již není k dispozici, zvolte jiný typ lodě"); }
        else if (pocet_jachet2 == 0 && typ_lode == 1 && Hraci.id_hrac == 2){ System.out.println(nazev_lode + " již není k dispozici, zvolte jiný typ lodě"); }
        else if (pocet_jachet == 0 && typ_lode == 1 && Hraci.id_hrac == 1){ System.out.println(nazev_lode + " již není k dispozici, zvolte jiný typ lodě"); }
        else if (pocet_parniku2 == 0 && typ_lode == 3 && Hraci.id_hrac == 2){ System.out.println(nazev_lode + " již není k dispozici, zvolte jiný typ lodě"); }
        else if (pocet_parniku == 0 && typ_lode == 3 && Hraci.id_hrac == 1){ System.out.println(nazev_lode + " již není k dispozici, zvolte jiný typ lodě"); }

        else
     { 
          if(smer.equals("v")) { Vertikal(znak, y, smer, typ_lode);}
     else if(smer.equals("h")) { Horizont(znak, y, smer, typ_lode);}
     else { System.out.println(nazev_lode + " nevytvořen/a, je zadán špatný směr");}
     }
     }    if(Hraci.id_hrac == 2)
     {       if (typ_lode == 0){System.out.println(nazev_lode + " k dipozici: " + Lode.pocet_clunu2);}
        else if (typ_lode == 1){System.out.println(nazev_lode + " k dipozici: " + Lode.pocet_jachet2);}
        else if (typ_lode == 3){System.out.println(nazev_lode + " k dipozici: " + Lode.pocet_parniku2);}
     }
         if(Hraci.id_hrac == 1)
     {       if (typ_lode == 0){System.out.println(nazev_lode + " k dipozici: " + Lode.pocet_clunu);}
        else if (typ_lode == 1){System.out.println(nazev_lode + " k dipozici: " + Lode.pocet_jachet);}
        else if (typ_lode == 3){System.out.println(nazev_lode + " k dipozici: " + Lode.pocet_parniku);}
     }

        if (Hraci.id_hrac == 2){VsechnyLode2();}
        else if (Hraci.id_hrac == 1){VsechnyLode();}
     }

     /** Metoda, vytvářející lodě v horizontálním směru*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi
     * @param typ_lode číselné vyjádření typu lodě */
     private static void Horizont(String znak, int y, String smer, int typ_lode)
     { 
        for (int i = x; i <= x+1+typ_lode; i++)
     {
        if (Hraci.id_hrac == 2){

        if (x == 0 || y == 0) { }
        else { hraci_pole2[y-1][i-1] = 2;}
        if (y == 0) { }
        else { hraci_pole2[y-1][i] = 2;}
        if (y == 0 || x == 8 - typ_lode) { }
        else { hraci_pole2[y-1][i+1] = 2;}

        if (x == 0 || i > x) { }
        else { hraci_pole2[y][i-1] = 2;}
        hraci_pole2[y][i] = 1;
        if (x == 8 - typ_lode) { }
        else { hraci_pole2[y][i+1] = 2;}

        if (x == 0 || y == 9) { }
        else { hraci_pole2[y+1][i-1] = 2;}
        if (y == 9) { }
        else { hraci_pole2[y+1][i] = 2;}
        if (x == 8 - typ_lode || y == 9) { }
        else { hraci_pole2[y+1][i+1] = 2;}
        }
        else 
        {
        if (x == 0 || y == 0) { }
        else { hraci_pole[y-1][i-1] = 2;}
        if (y == 0) { }
        else { hraci_pole[y-1][i] = 2;}
        if (y == 0 || x == 8 - typ_lode) { }
        else { hraci_pole[y-1][i+1] = 2;}

        if (x == 0 || i > x) { }
        else { hraci_pole[y][i-1] = 2;}
        hraci_pole[y][i] = 1;
        if (x == 8 - typ_lode) { }
        else { hraci_pole[y][i+1] = 2;}

        if (x == 0 || y == 9) { }
        else { hraci_pole[y+1][i-1] = 2;}
        if (y == 9) { }
        else { hraci_pole[y+1][i] = 2;}
        if (x == 8 - typ_lode || y == 9) { }
        else { hraci_pole[y+1][i+1] = 2;}
        }
     }    if (Hraci.id_hrac == 2){UbytekLodi2(typ_lode);}
     else if (Hraci.id_hrac == 1){UbytekLodi(typ_lode);}
     }

     /** Metoda, vytvářející lodě v vertikálním směru*
     *
     * @param znak x-ová souřadnice
     * @param y y-ová souřadnice
     * @param smer smer vytvoření lodi
     * @param typ_lode číselné vyjádření typu lodě */
     private static void Vertikal(String znak, int y, String smer, int typ_lode)
     {
        for (int i = y; i <= y+1+typ_lode; i++)
     {
        if(Hraci.id_hrac == 2){
        if (x == 0 || y == 0) { }
        else { hraci_pole2[i-1][x-1] = 2;}
        if (y == 0 || (i > y) ) { }
        else { hraci_pole2[i-1][x] = 2;}
        if(y == 0 || x == 9){ }
        else { hraci_pole2[i-1][x+1] = 2;}

        if (x == 0) { }
        else { hraci_pole2[i][x-1] = 2;}
        hraci_pole2[i][x] = 1;
        if(x == 9){ }
        else { hraci_pole2[i][x+1] = 2;}

        if (x == 0 || y == 8 - typ_lode) { }
        else { hraci_pole2[i+1][x-1] = 2;}
        if (y == 8 - typ_lode){ }
        else { hraci_pole2[i+1][x] = 2;}
        if (y == 8 - typ_lode || x == 9){ }
        else { hraci_pole2[i+1][x+1] = 2;}
        }
        else {
        if (x == 0 || y == 0) { }
        else { hraci_pole[i-1][x-1] = 2;}
        if (y == 0 || (i > y) ) { }
        else { hraci_pole[i-1][x] = 2;}
        if(y == 0 || x == 9){ }
        else { hraci_pole[i-1][x+1] = 2;}

        if (x == 0) { }
        else { hraci_pole[i][x-1] = 2;}
        hraci_pole[i][x] = 1;
        if(x == 9){ }
        else { hraci_pole[i][x+1] = 2;}

        if (x == 0 || y == 8 - typ_lode) { }
        else { hraci_pole[i+1][x-1] = 2;}
        if (y == 8 - typ_lode){ }
        else { hraci_pole[i+1][x] = 2;}
        if (y == 8 - typ_lode || x == 9){ }
        else { hraci_pole[i+1][x+1] = 2;}
        }
     }
         if (Hraci.id_hrac == 2){UbytekLodi2(typ_lode);}
     else if (Hraci.id_hrac == 1){UbytekLodi(typ_lode);}
     }

     /** Metoda zajišťující úbytek lodí hráče1*
     *
     * @param typ_lode číselné vyjádření typu lodě */
     private static void UbytekLodi(int typ_lode)
     {
//        System.out.println(nazev_lode + " vytvořen/a");
             if(typ_lode == 0 ){pocet_clunu = pocet_clunu -1; System.out.println("Člun vytvořen");}
        else if(typ_lode == 1 ){pocet_jachet = pocet_jachet -1; System.out.println("Jachta vytvořena");}
        else if(typ_lode == 3 ){pocet_parniku = pocet_parniku -1; System.out.println("Parník vytvořen");}
     }

     /** Metoda zajišťující úbytek lodí hráče2*
     *
     * @param typ_lode číselné vyjádření typu lodě */
     private static void UbytekLodi2(int typ_lode)
     {
//        System.out.println(nazev_lode + " vytvořen/a");
             if(typ_lode == 0 ){pocet_clunu2 = pocet_clunu2 -1; System.out.println("Člun vytvořen");}
        else if(typ_lode == 1 ){pocet_jachet2 = pocet_jachet2 -1; System.out.println("Jachta vytvořena");}
        else if(typ_lode == 3 ){pocet_parniku2 = pocet_parniku2 -1; System.out.println("Parník vytvořen");}
     }

     /** Metoda zajišťující převod x-ové souřadnice *
     *
     * @param znak číselné vyjádření x-ové souřadnice */
     private static void PrevodZnaku(String znak)
     {
         Ciselnik.Prevodnik(znak);
         x = Ciselnik.vystupni_cislo;
     }

     /** Metoda zajišťující převod směru do číselné podoby*
     *
     * @param smer směr vytvářené lodě */
     private static void PrevodSmeru(String smer)
     {
        if (smer.equals("v")){pom_smer = 0;}
        else {pom_smer = 1;}
     }

     /** Metoda kontrolující, zda jsou vytvořeny všechny lodě hráče1 */
     public static boolean VsechnyLode()
     {
         if(pocet_clunu == 0 && pocet_jachet == 0 && pocet_parniku == 0 && pocet_tankeru == 0)
         {System.out.println("Všechny lodě rozmístěny");
          vsechny_lode = true;
         }
         else{vsechny_lode2 = false;}
         return vsechny_lode;
     }

     /** Metoda kontrolující, zda jsou vytvořeny všechny lodě hráče2 */
     public static boolean VsechnyLode2()
     {
         if(pocet_clunu2 == 0 && pocet_jachet2 == 0 && pocet_parniku2 == 0 && pocet_tankeru2 == 0)
         {System.out.println("Všechny lodě rozmístěny");
          vsechny_lode2 = true;
         }
         else{vsechny_lode2 = false;}
         return vsechny_lode2;
     }
}
    /*odstranění lodí*/


